In order to reduce execution time, some computing tasks can be subdivided into smaller tasks that can be executed concurrently in separate processes supported by a parallel computing environment. Parallel computing environments use multiple processor cores to execute parallel processes. For instance, parallel computing systems may contain any plural number of processor cores, from as few as two to as much as thousands, though there is no theoretical limit on the maximum number of processor cores that may be present on a parallel computing environment.
Computation that involves parallel code often contains multiple threads of control that are all executing the same code simultaneously. An example of this may be found in data parallel computation, in which a data set is processed in a function in which there is no interdependencies between the processing of one portion of the data set and another portion of the data set. In that case, the data set may be divided, with each portion assigned to a method that applies the processing to that portion. The methods that process the data are different instances of the same method. With multiple instances of the methods operating concurrently against different portions of the data set, the data is processed much more quickly.
In any debugging task, the developer builds up a mental model of the state of the computation. The same is true of debugging parallel code. A program debugger helps with this task by allowing the developer to navigate the program state and display data describing that state. For instance, the program debugger may display thread stacks and the program data structure contents. For parallel code, there tends to be many stacks and more data to understand.